package slideWindow;

/**
 * @author pengfei.hpf
 * @date 2020/3/10
 * @verdion 1.0.0
 * 1004. Max Consecutive Ones III
 * Given an array A of 0s and 1s, we may change up to K values from 0 to 1.
 *
 * Return the length of the longest (contiguous) subarray that contains only 1s.
 *
 *
 *
 * Example 1:
 *
 * Input: A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
 * Output: 6
 * Explanation:
 * [1,1,1,0,0,1,1,1,1,1,1]
 * Bolded numbers were flipped from 0 to 1.  The longest subarray is underlined.
 * Example 2:
 *
 * Input: A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
 * Output: 10
 * Explanation:
 * [0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
 * Bolded numbers were flipped from 0 to 1.  The longest subarray is underlined.
 *
 *
 * Note:
 *
 * 1 <= A.length <= 20000
 * 0 <= K <= A.length
 * A[i] is 0 or 1
 */
public class LongestOnes {
    public int longestOnes(int[] A, int K) {
        if(A == null || A.length == 0){
            return 0;
        }
        int max = 0;
        int curMax = 0;
        int left = 0;
        int right = 0;
        int size = 0;
        while(right < A.length){
            if(A[right] == 1){
                curMax ++;
            }
            right ++;
            size ++;
            if(size <= curMax + K){
                max = Math.max(max, size);
            }
            while(size > curMax + K){
                if(A[left] == 1){
                    curMax --;
                }
                size --;
                left ++;
            }
        }
        return max;

    }
}
